Passed
Push — feature/hidden-job-option ( 325081...da89d6 )
by Yonathan
04:25 queued 01:01
created

localize.ts ➔ localizeField   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
import { localizedField, localizedFieldNonNull } from "../models/app";
2
3
export type Locales = "en" | "fr";
4
type TranslatableKeysNonNull<T> = {
5
  [K in keyof T]: T[K] extends localizedFieldNonNull ? K : never;
6
}[keyof T];
7
type TranslatableKeys<T> = {
8
  [K in keyof T]: T[K] extends localizedField ? K : never;
9
}[keyof T];
10
11
export function localizeField<T>(
12
  locale: Locales,
13
  model: T,
14
  field: TranslatableKeys<T>,
15
): string | null {
16
  return model[field][locale];
17
}
18
export function localizeFieldNonNull<T>(
19
  locale: Locales,
20
  model: T,
21
  field: TranslatableKeysNonNull<T>,
22
): string {
23
  return model[field][locale];
24
}
25
26
export function getLocale(locale: string): Locales {
27
  if (locale === "en" || locale === "fr") {
28
    return locale;
29
  }
30
  console.log("Warning: unknown locale. Defaulting to en.");
31
  return "en";
32
}
33